-- rescue_slime
-- Created by chengb Feb/7/2015
-- 营救冈布奥

-- 内部函数声明
local whenPickUp;

-- 关注地牢中拾取的事件
EventMgr.register("task/rescue_slime", event.PICK_UP_ITEM, function(args)
    whenPickUp(args);
end);

-- 地牢中拾取的回调
whenPickUp = function(args)
    local bonus = args.bonus;

    -- 玩家不在地牢中
    if not DungeonM.isInDungeon() then
        return;
    end

    -- 不是冈布奥
    if bonus[1] ~= 3 then
        return;
    end

    -- 获取当前所在的地牢层
    local layer = DungeonM.currentLayer();

    -- 获取当前所在的地牢区域
    local area = DungeonM.getDungeonId();

    -- 获取当前区域的冈布奥
    local slime = DungeonAreaM.getAreaSlime(area);

    --  当前区域没有配置史莱姆
    if type(slime) ~= "table" then 
        return;
    end

    local classId = table.values(slime)[1];
    if bonus[2] ~= classId then
        -- 不是需求的冈布奥
        return;
    end

    -- 获取本规则对应的所有任务
    local taskList = TaskM.getTasksByRule("rescue_slime");
    if type(taskList) ~= "table" or #taskList <=0 then
        return;
    end

    -- 判断是否是符合要求的任务
    local function isValidTask(info)
        local taskId = info["id"];

        if info["area"] ~= area then
            -- 非当前区域的任务
            return false;
        end

        if TaskM.isFinished(taskId) then
            -- 已完成
            return false;
        end

        local progress = TaskM.getProgress(taskId);
        if progress < 0 then
            -- 未领取
            return false;
        end

        return true;
    end

    for _, info in pairs(taskList) do
        local taskId = info["id"];
        local progress = TaskM.getProgress(taskId);

        if isValidTask(info) then
            -- 如果是符合条件的任务，更新进度
            TaskM.setProgress(taskId, progress + 1);
        end
    end
end


return {
    -- 获取任务描述
    getTaskDesc = function(taskId)
        local descFormat = TaskM.query(taskId, "desc");

        -- 获取当前区域的冈布奥
        local area  = TaskM.query(taskId, "area");
        local slime = DungeonAreaM.getAreaSlime(area);
        if slime == nil then
            return descFormat;
        end

        local layer = table.keys(slime)[1];
        local classId = table.values(slime)[1];
        local name = PetM.query(classId, "name");

        local str = string.format(descFormat, name, layer);
        return str;
    end,

    -- 获取任务日志
    getTaskLog = function(taskId)
        return AreaTaskM.getTaskLog(taskId);
    end
};